package aerouacmsla.interfazDeUsuario;
import aerouacmsla.entidad.Ciudad;
import aerouacmsla.procedimientos.BDConexion;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import aerouacmsla.procedimientos.GeneradorIdes;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

/**
 *
 * @author six
 */
public class VentanaNuevaCiudad extends javax.swing.JDialog {

    private BDConexion miConexion;
     private Ciudad ciudadActual = new Ciudad();
    
    public VentanaNuevaCiudad() {
        initComponents();
    }

    public VentanaNuevaCiudad(BDConexion miConexion) {
        initComponents();
        setMiConexion(miConexion);
        setModal(true);
    }

    public VentanaNuevaCiudad(Ciudad c, BDConexion miConexion) {

        initComponents();
        setMiConexion(miConexion);
        setCiudadActual(c);
        setModal(true);

         Registrar.setText("Modificar");
        ciudadRegistroCiudades.setText(getCiudadActual().getCiudad());
        estadoRegistroCiudades.setText(getCiudadActual().getEstado());
        paisRegistroCiudades.setText(getCiudadActual().getPais());
        idCiudad.setText(getCiudadActual().getId());
    }

    public Ciudad getCiudadActual() {
        return ciudadActual;
    }

    public void setCiudadActual(Ciudad ciudadActual) {
        this.ciudadActual = ciudadActual;
    }



    public BDConexion getMiConexion() {
        return miConexion;
    }

    public void setMiConexion(BDConexion miConexion) {
        this.miConexion = miConexion;
    }

    public boolean validarTam (String cadena, int tamano){
        if(cadena.length()<=tamano){
            return false;
        }
        return true;
    }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        topPanel = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        idCiudad = new javax.swing.JLabel();
        ciudadRegistroCiudades = new javax.swing.JTextField();
        estadoRegistroCiudades = new javax.swing.JTextField();
        paisRegistroCiudades = new javax.swing.JTextField();
        Registrar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Ciudad");
        setIconImage(new ImageIcon(getClass().getResource("/Recursos/IconoCiudad32px.png")).getImage());

        topPanel.setBackground(new java.awt.Color(51, 51, 51));

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 18));
        jLabel3.setForeground(new java.awt.Color(255, 255, 255));
        jLabel3.setText("Panel Registro de Ciudades");

        javax.swing.GroupLayout topPanelLayout = new javax.swing.GroupLayout(topPanel);
        topPanel.setLayout(topPanelLayout);
        topPanelLayout.setHorizontalGroup(
            topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(topPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel3)
                .addContainerGap(176, Short.MAX_VALUE))
        );
        topPanelLayout.setVerticalGroup(
            topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(topPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel3)
                .addContainerGap(31, Short.MAX_VALUE))
        );

        jLabel1.setText("Id Ciudad:");

        jLabel2.setText("Ciudad:");

        jLabel4.setText("Estado:");

        jLabel5.setText("Pais:");

        Registrar.setText("Registrar");
        Registrar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                RegistrarMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel1)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(idCiudad))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel2)
                                .addGap(18, 18, 18)
                                .addComponent(ciudadRegistroCiudades))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel4)
                                    .addComponent(jLabel5))
                                .addGap(18, 18, 18)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(paisRegistroCiudades, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
                                    .addComponent(estadoRegistroCiudades)))))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(156, 156, 156)
                        .addComponent(Registrar)))
                .addContainerGap(167, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(idCiudad))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(ciudadRegistroCiudades, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(estadoRegistroCiudades, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(paisRegistroCiudades, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(35, 35, 35)
                .addComponent(Registrar)
                .addContainerGap(54, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(topPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(topPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void RegistrarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_RegistrarMouseClicked

         if(!ciudadRegistroCiudades.getText().isEmpty()&&
           !estadoRegistroCiudades.getText().isEmpty()&&
           !paisRegistroCiudades.getText().isEmpty()){

              boolean excedecaracteres[] = {
                  validarTam(ciudadRegistroCiudades.getText(),30),
                  validarTam(estadoRegistroCiudades.getText(),30),
                  validarTam(paisRegistroCiudades.getText(),30),
};
              if( excedecaracteres[0] || excedecaracteres[1] ||
                  excedecaracteres[2]){
                  boolean someError = false;
            String mensajeDeError = "";
            if (excedecaracteres[0]){
                someError = true;
                mensajeDeError += "El campo 'Ciudad' debe ser menor o igual a 30 caracteres\n";
                System.out.println("exede numero de caracteres en Ciudad");
            }
            if (excedecaracteres[1]){
                someError = true;
                mensajeDeError += "El campo 'Estado' debe ser menor o igual a 30 caracteres\n";
                System.out.println("exede numero de caracteres en Estado");
            }
            if (excedecaracteres[2]){
                someError = true;
                mensajeDeError += "El campo 'Pais' debe ser menor o igual a 30 caracteres\n";
                System.out.println("exede numero de caracteres en Pais");
            }
            if (someError)
                JOptionPane.showMessageDialog(this,
                 mensajeDeError,
                 "Error de datos",
                 JOptionPane.ERROR_MESSAGE);

              } else
                    {
                  getCiudadActual().setId(idCiudad.getText());
                  getCiudadActual().setCiudad(ciudadRegistroCiudades.getText());
                  getCiudadActual().setEstado(estadoRegistroCiudades.getText());
                  getCiudadActual().setPais(paisRegistroCiudades.getText());

                    GeneradorIdes GI = new GeneradorIdes(getCiudadActual().getCiudad(), getCiudadActual().getEstado(), getCiudadActual().getPais());
                  if (Registrar.getText().equalsIgnoreCase("Registrar")) {
                       ciudadActual.setId(GI.getId());
                      for (;;) {
                          try {
                              if (getMiConexion().sendSQLQuery("SELECT * FROM ciudades WHERE id_ciudad = '" + getCiudadActual().getId() + "';").next()) {
                                  ciudadActual.setId(GI.siguienteId());
                              } else {
                                  break;
                              }
                          } catch (SQLException ex) {
                              Logger.getLogger(PanelAdministrarCiudades.class.getName()).log(Level.SEVERE, null, ex);
                          }
                      }
                  }

                     String SQL = null;
            if(Registrar.getText().equalsIgnoreCase("Registrar")){
                   SQL = "INSERT INTO ciudades VALUES ('"+ getCiudadActual().getId() +"', '" + getCiudadActual().getCiudad()
                    + "', '" + getCiudadActual().getEstado() + "', '" + getCiudadActual().getPais() +"');";
            }
            else{
                    SQL = " UPDATE ciudades SET id_ciudad = '" +
                        getCiudadActual().getId() +"' , nombre_ciudad ='"+getCiudadActual().getCiudad() +"', estado = '" +
                        getCiudadActual().getEstado()+"', pais = '"+getCiudadActual().getPais()+"' WHERE id_ciudad = '" + getCiudadActual().getId() +"';";
                }
                     getMiConexion().sendSQL(SQL);
            JOptionPane.showMessageDialog(this,
                 "La ciudad ha sido registrado exitosamente",
                 "Ciudad Registrado Exitosamente",
                 JOptionPane.INFORMATION_MESSAGE);
            this.dispose();

              }

        }else JOptionPane.showMessageDialog(this,
                 "Es necesario llenar todos los campos",
                 "Error de datos",
                 JOptionPane.ERROR_MESSAGE);

        

    }//GEN-LAST:event_RegistrarMouseClicked
    /**
    * @param args the command line arguments
    */

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new VentanaNuevaCiudad().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Registrar;
    private javax.swing.JTextField ciudadRegistroCiudades;
    private javax.swing.JTextField estadoRegistroCiudades;
    private javax.swing.JLabel idCiudad;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField paisRegistroCiudades;
    private javax.swing.JPanel topPanel;
    // End of variables declaration//GEN-END:variables

}
